/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package ejercicio.practica6;

import java.util.Random;
import java.util.Scanner;

/**
 *
 * @author manolo
 */
public class suavImagenParFin implements Runnable {

    private static int[][] imagen;
    private static int fila, columna;

    public suavImagenParFin(int fila, int columna) {
        suavImagenParFin.fila = fila;
        suavImagenParFin.columna = columna;
    }

    public suavImagenParFin() {
    }

    private static void inicializarImagen(int m) {
        Random rm = new Random();
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < m; j++) {
                imagen[i][j] = rm.nextInt(20);
            }
        }
    }

    @Override
    public void run() {
        imagen[fila][columna] = (4 * imagen[fila][columna] - imagen[fila + 1][columna] - imagen[fila][columna + 1] - imagen[fila - 1][columna] - imagen[fila][columna - 1]) / 8;
    }

    public static void main(String[] args) throws InterruptedException {
        int m;
        long inicio, fin;
        Scanner teclado = new Scanner(System.in);

        System.out.println("Introduzca la dimension de la imagen: ");
        m = teclado.nextInt();
        imagen = new int[m][m];
        inicializarImagen(m);
        inicio = System.currentTimeMillis();
        Thread[] Hilos = new Thread[(m - 1) * (m - 1)];
        int contador = 0;
        for (int i = 1; i < m - 1; i++) {
            for (int j = 1; j < m - 1; j++) {
                Hilos[contador] = new Thread(new suavImagenParFin(i, j));
                Hilos[contador].start();
                contador++;
            }
        }
        contador = 0;
        for (int i = 1; i < m - 1; i++) {
            for (int j = 1; j < m - 1; j++) {
                Hilos[contador].join();
                contador++;
            }
        }
        fin = System.currentTimeMillis();
        System.out.println("Se ha invertido " + (fin - inicio) + " mseg.");

    }
}
